const { AdminModel } = require('../../models/index')
const jwtUtils = require('../../utils/jwtUtils')
const passwordUtils = require('../../utils/passwordUtils')

// 注册功能
const AdminRegister = async (req, res) => {
  try {
    // 验证输入
    if (!req.body.username || !req.body.password) {
      throw new Error('用户名或者不能密码为空')
    }

    // 使用正则表达式验证输入的用户名和密码
    const usernameRegex = /^[a-zA-Z0-9_]{5,10}$/ //匹配5-10个非空白字符
    const passwordRegex = /^\S{6,15}$/  //匹配6-15位非空白字符
    if (!usernameRegex.test(req.body.username)) {
      throw new Error('用户名必须是5-10位的非空字符')
    }
    if (!passwordRegex.test(req.body.password)) {
      throw new Error('密码必须是6-15位的非空字符')
    }

    // 获取密码和用户名
    const { username, password } = req.body

    // 对密码进行加密
    const hashPassword = await passwordUtils.hashPassword(password)

    // 创建用户
    try {
      const newUser = await AdminModel.create({
        username,
        password: hashPassword
      })

      // 返回用户信息
      res.status(201).json({
        message: '注册成功',
        user: {
          id: newUser.id,
          username: newUser.username
        }
      })
    } catch (error) {
      if (error.name === 'SequelizeUniqueConstraintError') {
        return res.status(409).json({ error: '用户名已经存在' })
      } else {
        return res.status(500).json({ error: '注册失败' })
      }
    }
  } catch (error) {
    // 通用错误处理
    res.status(500).json({ error: error.message })
  }
}

// 登录功能
const AdminLogin = async (req, res) => {
  try {
    if (!req.body.username || !req.body.password) {
      throw new Error('用户名或密码为空')
    }

    // 使用正则表达式验证输入的用户名和密码
    const usernameRegex = /^[a-zA-Z0-9_]{5,10}$/ //匹配5-10个非空白字符
    const passwordRegex = /^\S{6,15}$/  //匹配6-15位非空白字符
    if (!usernameRegex.test(req.body.username)) {
      throw new Error('用户名必须是5-10位的非空字符')
    }
    if (!passwordRegex.test(req.body.password)) {
      throw new Error('密码必须是6-15位的非空字符')
    }

    // 获取用户名和密码
    const { username, password } = req.body

    // 查找用户
    const User = await AdminModel.findOne({
      where: {
        username: username
      }
    })
    if (!User) {
      return res.status(401).json({ error: '用户不存在' })
    }

    // 验证密码
    try {
      const isMatch = await passwordUtils.checkPassword(password, User.password)
      if (!isMatch) {
        return res.status(401).json({ error: '密码错误' })
      }
    } catch (error) {
      console.error('验证密码时发生错误', error);
    }

    // 生成JWT
    const token = jwtUtils.generateToken(User.username, 'admin')

    // 验证密码成功，允许登录
    res.status(200).json({
      message: '登录成功',
      user: {
        id: User.id,
        username: User.username,
        token,
        avatar: User.avatar
      },
    })
  } catch (error) {
    res.status(500).json({ error: error.message })
  }
}

module.exports = {
  AdminRegister,
  AdminLogin
}